import { defineStore } from 'pinia'

export default defineStore({
  id: 'user',
  persist: {
    storage: localStorage,
    paths: ['data'],
  },
  state: () => ({
    // 存储登录后返回的数据
    data: {},
    // 存储角色集（静态权限验证用到）
    roles: [],
    // 存储权限（动态权限验证用到）
    auths: [],
    // 存储动态路由（动态权限验证用到）
    dynamicRoutes: [],
    // 存储静态路由
    staticRoutes: [],
    lastRoute: {}
  }),
  getters: {
    // 判断是否有 dynamicRoutes 数据
    hasDynamicRoutes() {
      return this.dynamicRoutes && this.dynamicRoutes instanceof Array && this.dynamicRoutes.length > 0
    },
    allRoutes() {
      return this.staticRoutes.concat(this.dynamicRoutes)
    }
  },
  actions: {
    // 初始化动态路由，将后端的权限转化为前端的 routes 结构，建议后端的权限默认与前端 routes 结构一致，这里默认为相同结构
    //（结构详看：src/mock/adminAuth.js，注意： component 字段的数据格式）
    initDynamicRoutes() {
      if (this.auths) {
        this.dynamicRoutes = this.auths
      }
    },
    clear() {
      this.data = {}
      this.roles = []
      this.auths = []
      this.dynamicRoutes = []
      this.staticRoutes = []
    }
  }
})

